package com.smart.community.commons.utils;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * 树形结构工具类
 * 
 * @author Wu.Liang
 */
public class TreeUtils {

    /**
     * 构建树形结构
     */
    public static <T extends TreeNode<T>> List<T> buildTree(List<T> nodes) {
        if (nodes == null || nodes.isEmpty()) {
            return new ArrayList<>();
        }

        // 按父ID分组
        Map<Long, List<T>> parentMap = nodes.stream()
                .collect(Collectors.groupingBy(node -> 
                    node.getParentId() != null ? node.getParentId() : 0L));

        // 设置子节点
        nodes.forEach(node -> {
            List<T> children = parentMap.get(node.getId());
            if (children != null) {
                node.setChildren(children);
            }
        });

        // 返回根节点
        return parentMap.get(0L) != null ? parentMap.get(0L) : new ArrayList<>();
    }

    /**
     * 树节点接口
     */
    public interface TreeNode<T> {
        Long getId();
        Long getParentId();
        List<T> getChildren();
        void setChildren(List<T> children);
    }
}
